// 在子类中重载基类方法，并不会隐藏基类版本
class Homer {
    char doh(char c) {
        System.out.println("doh(char)");
        return 'd';
    }

    float doh(float f) {
        System.out.println("doh(float)");
        return 1.0f;
    }
}

class Milhouse {
}

class Bart extends Homer {
    // 打算重写一个方法时，可以选择添加 @Override 注解，
    // 如果不小心对方法进行了重载而不是重写，编译器就会产生一个错误消息: Method does not override method from its superclass
    // @Override
    void doh(Milhouse m) {
        System.out.println("doh(Milhouse)");
    }
}


public class Hide {
    public static void main(String[] args) {
        Bart b = new Bart();
        b.doh(1);
        b.doh('x');
        b.doh(1.1f);
        b.doh(new Milhouse());
    }
}

/*
doh(float)
doh(char)
doh(float)
doh(Milhouse)
 */

/*
Homer 类中定义了两个 doh 方法：
    1. char doh(char c)：接受 char 类型参数。
    2. float doh(float f)：接受 float 类型参数。
这是典型的 方法重载，根据参数类型不同调用不同的方法。

Bart 类继承自 Homer，并新增一个 doh 方法：
    void doh(Milhouse m)：接受自定义类型 Milhouse。
这也是 重载方法，因为其参数类型不同于父类中的方法。

方法重载机制：根据传递的参数类型选择合适的方法。
类型转换影响方法匹配：如 int -> float 的自动转型导致调用对应版本。
继承中的方法可见性：子类可以继承父类的重载方法，并可以新增自己的重载版本。
 */